﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using System.Data.SqlClient;
using System.IO;

namespace MikroTransfer
{
    public partial class frmNokiaAktarim : XtraForm
    {
        private object alisSerileri = null;
        private List<NokiaDepo> _depolar = new List<NokiaDepo>();

        public frmNokiaAktarim()
        {
            InitializeComponent();
        }


        private void frmNokiaAktarim_Load(object sender, EventArgs e)
        {
            dteBaslangicTarih.DateTime = DateTime.Now.AddDays(-1);
            dteBitisTarihi.DateTime = DateTime.Now;

            if (File.Exists(Application.StartupPath + "\\nokia_depo_eslestirme.txt"))
            {
                using (StreamReader sr = new StreamReader(Application.StartupPath + "\\nokia_depo_eslestirme.txt"))
                {
                    while (sr.Peek() > -1)
                    {
                        string[] fields = sr.ReadLine().Split(';');
                        Db dbsystem = Db.C04;
                        switch (fields[0])
                        {
                            case "C02":
                                dbsystem = Db.C02;
                                break;
                            case "C04":
                                dbsystem = Db.C04;
                                break;
                            case "C14":
                                dbsystem = Db.C14;
                                break;
                        }
                        _depolar.Add(new NokiaDepo()
                        {
                            DbSystem = dbsystem,
                            HedefDepo = Cevir.Parse<int>(fields[2]),
                            KaynakDepo = Cevir.Parse<int>(fields[1])
                        });
                    }
                    sr.Close();
                }
            }

            KarsiDepono(Db.C14, 23);
        }

        private int KarsiDepono(Db dbsystem, int depoNo)
        {
            foreach (NokiaDepo item in _depolar)
            {
                if (item.DbSystem == dbsystem && item.KaynakDepo == depoNo)
                {
                    return item.HedefDepo;
                }
            }
            return depoNo;
        }


        private object SerinoBilgileri(int charId, Db dbsystem)
        {
            using (Query q = new Query(dbsystem))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("SELECT     chz.ChHar_SeriNo, chz.ChHar_StokKodu, sr.chz_al_evr_seri, sr.chz_al_evr_sira, sr.chz_st_evr_seri, sr.chz_st_evr_sira, sr.chz_al_fiati_ana, sr.chz_st_fiati_ana, ");
                sb.Append("                      sr.chz_al_tarih, sr.chz_st_tarih, sr.chz_GrnBasTarihi, sr.chz_GrnBitTarihi, sr.chz_al_cari_kodu, sr.chz_st_cari_kodu, STOK_HAREKETLERI.sth_RECno ");
                sb.Append(" FROM         CIHAZ_HAREKETLERI AS chz WITH (NOLOCK) INNER JOIN ");
                sb.Append("                      STOK_SERINO_TANIMLARI AS sr WITH (NOLOCK) ON chz.ChHar_SeriNo = sr.chz_serino AND chz.ChHar_StokKodu = sr.chz_stok_kodu INNER JOIN ");
                sb.Append("                      STOK_HAREKETLERI ON chz.ChHar_master_recno = STOK_HAREKETLERI.sth_RECno ");
                sb.Append(" WHERE     (chz.ChHar_master_tablo = 0) AND (chz.ChHar_master_dbcno = 0) AND (STOK_HAREKETLERI.sth_fat_recid_recno = @sharid) ");

                q.Add(sb.ToString());
                q.Add("@sharid", SqlDbType.Int, charId);
                var list = q.ToList(new { seri = "", stokkod = "", alisSeri = "", alisSira = 0, satisSeri = "", satisSira = 0, alisFiyat = 0d, satisFiyat = 0d, alisTarih = DateTime.Now, satisTarih = DateTime.Now, grntBas = DateTime.Now, grntBit = DateTime.Now, alisCari = "", satisCari = "", sharid = 0 });
                return list;
            }
        }

        private void CheckedAktarildi(Db dbsystem, int kaynak_char_id, int hedef_char_id)
        {
            using (Query q = new Query(dbsystem))
            {
                q.Add(string.Format("if not exists(SELECT     hedef_char_id  FROM         AKTARILANLAR  WHERE     (kaynak_char_id = {0})) INSERT INTO AKTARILANLAR  (kaynak_char_id,hedef_char_id)  VALUES     ({0}, {1})", kaynak_char_id, hedef_char_id));
                q.Exec();
            }
        }

        private void AlisFaturaAktar()
        {
            Application.DoEvents();

            Mikro _mikro = new Mikro(Db.Nokia);
            DbSqlServer _sql = new DbSqlServer(Db.Nokia);

            string cariKodu = Program.Session[Settings.NokiaAlisFirmaKodu].ToString();
            DateTime bastarih = new DateTime(dteBaslangicTarih.DateTime.Year, dteBaslangicTarih.DateTime.Month, dteBaslangicTarih.DateTime.Day);
            DateTime bittarih = new DateTime(dteBitisTarihi.DateTime.Year, dteBitisTarihi.DateTime.Month, dteBitisTarihi.DateTime.Day, 23, 59, 59);

            using (Query q = new Query(Db.C04))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("exec sp_executesql N'SELECT     cha_RECno,cha_normal_Iade,cha_evrakno_seri, cha_evrakno_sira, cha_belge_tarih, cha_meblag, cha_vergi1, cha_vergi2, cha_vergi3, cha_vergi4, cha_vergi5, cha_vergi6, cha_vergi7,cha_vergi8, cha_vergi9, cha_vergi10, cha_satici_kodu, cha_ciro_cari_kodu, cha_aratoplam, cha_belge_no, cha_vade, cha_aciklama, cha_ft_iskonto1,cha_ft_iskonto2, cha_ft_iskonto3, cha_cari_cins, cha_kod, cha_srmrkkodu");
                sb.Append(" FROM         CARI_HESAP_HAREKETLERI WITH (NOLOCK) ");
                sb.AppendFormat(" WHERE  (cha_evrak_tip = 0) AND (cha_belge_tarih >= ''{0}'' and cha_belge_tarih <= ''{2}'') AND (cha_ciro_cari_kodu = ''{1}'') ", bastarih.ToFullSqlString(), cariKodu, bittarih.ToFullSqlString());
                sb.Append(" and (cha_RECno not in (SELECT     kaynak_char_id  FROM         AKTARILANLAR)) '");
                q.Add(sb.ToString());
                var charList = q.ToList(new
                {
                    id = 0,
                    iade = byte.MinValue,
                    seri = "",
                    sira = 0,
                    tarih = DateTime.Now,
                    meblag = 0d,
                    vergi1 = 0d,
                    vergi2 = 0d,
                    vergi3 = 0d,
                    vergi4 = 0d,
                    vergi5 = 0d,
                    vergi6 = 0d,
                    vergi7 = 0d,
                    vergi8 = 0d,
                    vergi9 = 0d,
                    vergi10 = 0d,
                    satici = "",
                    cari = "",
                    aratoplam = 0d,
                    belgeno = "",
                    vade = 0,
                    aciklama = "",
                    isk1 = 0d,
                    isk2 = 0d,
                    isk3 = 0d,
                    caricins = 0,
                    chakod = "",
                    srmkod = ""
                });

                progressBarControl1.Properties.Minimum = 0;
                progressBarControl1.Position = 0;
                progressBarControl1.Properties.Maximum = charList.Count;

                q.Clear();
                sb = new StringBuilder();
                sb.Append("exec sp_executesql N'SELECT     sth_evrakno_seri, sth_evrakno_sira, sth_tarih, sth_satirno, sth_stok_kod, sth_cari_kodu, sth_plasiyer_kodu, sth_miktar, sth_tutar, sth_vergi_pntr, sth_vergi, ");
                sb.Append("                      sth_fat_recid_recno, sth_giris_depo_no, sth_cikis_depo_no, sth_iskonto1, sth_iskonto2, sth_iskonto3,sth_RECno ");
                sb.Append(" FROM         STOK_HAREKETLERI WITH (NOLOCK) ");
                sb.AppendFormat(" WHERE     (sth_evraktip = 3) AND (sth_tarih >= ''{0}'' and sth_tarih <= ''{2}'') AND (sth_cari_kodu = ''{1}'')'", bastarih.ToFullSqlString(), cariKodu, bittarih.ToFullSqlString());
                q.Add(sb.ToString());
                var sharList = q.ToList(new
                {
                    seri = "",
                    sira = 0,
                    tarih = DateTime.Now,
                    satir = 0,
                    stokkod = "",
                    cari = "",
                    plasiyer = "",
                    miktar = 0d,
                    tutar = 0d,
                    vergiId = 0,
                    vergiTutari = 0d,
                    charId = 0,
                    giridDepo = 0,
                    cikisDepo = 0,
                    isk1 = 0d,
                    isk2 = 0d,
                    isk3 = 0d,
                    sharid = 0
                });

                SqlTransaction trn = _sql.OpenTransaction();
                string evrakSeri = txtSeri.Text;
                int evrakSira;
                int evrakSatir = 0;
                decimal[] vergiler = new decimal[10];
                int CharId = 0;
                foreach (var evr in charList)
                {
                    vergiler[0] = Cevir.Parse<decimal>(evr.vergi1);
                    vergiler[1] = Cevir.Parse<decimal>(evr.vergi2);
                    vergiler[2] = Cevir.Parse<decimal>(evr.vergi3);
                    vergiler[3] = Cevir.Parse<decimal>(evr.vergi4);
                    vergiler[4] = Cevir.Parse<decimal>(evr.vergi5);
                    vergiler[5] = Cevir.Parse<decimal>(evr.vergi6);
                    vergiler[6] = Cevir.Parse<decimal>(evr.vergi7);
                    vergiler[7] = Cevir.Parse<decimal>(evr.vergi8);
                    vergiler[8] = Cevir.Parse<decimal>(evr.vergi9);
                    vergiler[9] = Cevir.Parse<decimal>(evr.vergi10);

                    evrakSira = _mikro.MaxEvrakNo(EvrakTipleri.AlisFaturasi, evrakSeri, trn);
                    CharId = _mikro.CharEkle(EvrakTipleri.AlisFaturasi, trn, txtSeri.Text, evrakSira, evr.tarih, Cevir.Parse<decimal>(evr.meblag), vergiler,
                        evr.satici, CariKodDuzelt(Db.C04, evr.cari), Cevir.Parse<decimal>(evr.aratoplam), evr.belgeno, evr.vade, evr.aciklama, Cevir.Parse<decimal>(evr.isk1), Cevir.Parse<decimal>(evr.isk2), Cevir.Parse<decimal>(evr.isk3), evr.caricins, CariKodDuzelt(Db.C04, evr.chakod), evr.srmkod,0);
                    if (CharId > -1)
                    {
                        evrakSatir = 0;
                        var seriList = SerinoBilgileri(evr.id, Db.C04).CastToList(new { seri = "", stokkod = "", alisSeri = "", alisSira = 0, satisSeri = "", satisSira = 0, alisFiyat = 0d, satisFiyat = 0d, alisTarih = DateTime.Now, satisTarih = DateTime.Now, grntBas = DateTime.Now, grntBit = DateTime.Now, alisCari = "", satisCari = "", sharid = 0 });
                        foreach (var shr in sharList.Where(x => x.charId == evr.id))
                        {
                            int sharid = _mikro.SharEkle(EvrakTipleri.AlisFaturasi, trn, evrakSeri, evrakSira, evr.tarih, evrakSatir, shr.stokkod,
                                 CariKodDuzelt(Db.C04, shr.cari), shr.plasiyer, Cevir.Parse<decimal>(shr.miktar), Cevir.Parse<decimal>(shr.tutar), shr.vergiId, Cevir.Parse<decimal>(shr.vergiTutari), CharId, KarsiDepono(Db.C04, shr.giridDepo), KarsiDepono(Db.C04, shr.cikisDepo), Cevir.Parse<decimal>(shr.isk1),
                                 Cevir.Parse<decimal>(shr.isk2), Cevir.Parse<decimal>(shr.isk3), evr.srmkod, 0);

                            foreach (var item in seriList.Where(x => x.sharid == shr.sharid))
                            {
                                _mikro.SerinoHareketEkle(item.seri, item.stokkod, sharid, item.grntBas, item.grntBit, item.alisTarih, item.satisTarih,
                                    evrakSeri, evrakSira, item.satisSeri, item.satisSira, Cevir.Parse<decimal>(item.alisFiyat), Cevir.Parse<decimal>(item.satisFiyat), item.alisCari, CariKodDuzelt(Db.C04, item.satisCari), trn);
                            }

                            evrakSatir++;
                        }

                        CheckedAktarildi(Db.C04, evr.id, CharId);
                    }

                    progressBarControl1.Position += 1;
                    progressBarControl1.Refresh();

                }

                try
                {
                    trn.Commit();
                    MessageBox.Show("Tamamlandı !");
                }
                catch (Exception ex)
                {
                    Logging.GetLog.ErrorLog(ex);
                    trn.Rollback();
                }

            }
        }

        private string CariKodDuzelt(Db dbsystem, string carikod)
        {
            switch (dbsystem)
            {
                case Db.C02:
                    return "A" + carikod;
                case Db.C04:
                    return "B" + carikod;
                case Db.C14:
                    return "C" + carikod;
            }
            return "";
        }

        private object AlinanSeriler()
        {
            if (alisSerileri == null)
            {
                using (Query q = new Query(Db.Nokia))
                {
                    string cariKodu = Program.Session[Settings.NokiaAlisFirmaKodu].ToString();
                    q.Add("SELECT     chz_serino, chz_stok_kodu FROM         STOK_SERINO_TANIMLARI WHERE chz_al_cari_kodu=@cari GROUP BY chz_serino, chz_stok_kodu");
                    q.Add("@cari", SqlDbType.VarChar, cariKodu, 25);
                    alisSerileri = q.ToList(new { serino = "", stokkod = "" });
                }
            }
            return alisSerileri;
        }

        private void SatisFaturaAktar(Db dbsystem)
        {
            var alinanSeriler = AlinanSeriler().CastToList(new { serino = "", stokkod = "" });

            Mikro _mikro = new Mikro(Db.Nokia);
            DbSqlServer _sql = new DbSqlServer(Db.Nokia);

            DateTime bastarih = new DateTime(dteBaslangicTarih.DateTime.Year, dteBaslangicTarih.DateTime.Month, dteBaslangicTarih.DateTime.Day);
            DateTime bittarih = new DateTime(dteBitisTarihi.DateTime.Year, dteBitisTarihi.DateTime.Month, dteBitisTarihi.DateTime.Day, 23, 59, 59);

            using (Query q = new Query(dbsystem))
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("exec sp_executesql N'SELECT     cha_RECno,cha_normal_Iade,cha_evrakno_seri, cha_evrakno_sira, cha_belge_tarih, cha_meblag, cha_vergi1, cha_vergi2, cha_vergi3, cha_vergi4, cha_vergi5, cha_vergi6, cha_vergi7,cha_vergi8, cha_vergi9, cha_vergi10, cha_satici_kodu, cha_ciro_cari_kodu, cha_aratoplam, cha_belge_no, cha_vade, cha_aciklama, cha_ft_iskonto1,cha_ft_iskonto2, cha_ft_iskonto3, cha_cari_cins, cha_kod, cha_srmrkkodu");
                sb.Append(" FROM         CARI_HESAP_HAREKETLERI WITH (NOLOCK) ");
                if (dbsystem == Db.C04)
                {
                    string c02 = Program.Session[Settings.NokiaC02FirmaKodu].ToString();
                    string c14 = Program.Session[Settings.NokiaC14FirmaKodu].ToString();

                    sb.AppendFormat(" WHERE  (cha_evrak_tip = 63) AND (cha_belge_tarih >= ''{0}'' and cha_belge_tarih <= ''{3}'') AND (cha_ciro_cari_kodu <> ''{1}'' and cha_ciro_cari_kodu <> ''{2}'' ) ", bastarih.ToFullSqlString(), c02, c14, bittarih.ToFullSqlString());
                }
                else if (dbsystem == Db.C02)
                {
                    string c02 = Program.Session[Settings.NokiaC02AktarilmayacakCari].ToString();
                    sb.AppendFormat(" WHERE  (cha_evrak_tip = 63) AND (cha_belge_tarih >= ''{0}'' and cha_belge_tarih <= ''{2}'') AND (cha_ciro_cari_kodu <> ''{1}'') ", bastarih.ToFullSqlString(), c02, bittarih.ToFullSqlString());
                }
                else if (dbsystem == Db.C14)
                {
                    string c14 = Program.Session[Settings.NokiaC14AktarilmayacakCari].ToString();
                    sb.AppendFormat(" WHERE  (cha_evrak_tip = 63) AND (cha_belge_tarih >= ''{0}'' and cha_belge_tarih <= ''{2}'') AND (cha_ciro_cari_kodu <> ''{1}'') ", bastarih.ToFullSqlString(), c14, bittarih.ToFullSqlString());
                }
                else
                {
                    sb.AppendFormat(" WHERE  (cha_evrak_tip = 63) AND (cha_belge_tarih >= ''{0}'' and cha_belge_tarih <= ''{2}'') ", bastarih.ToFullSqlString(), bittarih.ToFullSqlString());
                }

                sb.Append(" and (cha_RECno not in (SELECT     kaynak_char_id  FROM         AKTARILANLAR)) '");
                q.Add(sb.ToString());
                var charList = q.ToList(new
                {
                    id = 0,
                    iade = byte.MinValue,
                    seri = "",
                    sira = 0,
                    tarih = DateTime.Now,
                    meblag = 0d,
                    vergi1 = 0d,
                    vergi2 = 0d,
                    vergi3 = 0d,
                    vergi4 = 0d,
                    vergi5 = 0d,
                    vergi6 = 0d,
                    vergi7 = 0d,
                    vergi8 = 0d,
                    vergi9 = 0d,
                    vergi10 = 0d,
                    satici = "",
                    cari = "",
                    aratoplam = 0d,
                    belgeno = "",
                    vade = 0,
                    aciklama = "",
                    isk1 = 0d,
                    isk2 = 0d,
                    isk3 = 0d,
                    caricins = 0,
                    chakod = "",
                    srmkod = ""
                });

                progressBarControl1.Properties.Minimum = 0;
                progressBarControl1.Position = 0;
                progressBarControl1.Properties.Maximum = charList.Count;

                q.Clear();
                sb = new StringBuilder();
                sb.Append("exec sp_executesql N'SELECT     sth_evrakno_seri, sth_evrakno_sira, sth_tarih, sth_satirno, sth_stok_kod, sth_cari_kodu, sth_plasiyer_kodu, sth_miktar, sth_tutar, sth_vergi_pntr, sth_vergi, ");
                sb.Append("                      sth_fat_recid_recno, sth_giris_depo_no, sth_cikis_depo_no, sth_iskonto1, sth_iskonto2, sth_iskonto3,sth_RECno ");
                sb.Append(" FROM         STOK_HAREKETLERI WITH (NOLOCK) ");


                if (dbsystem == Db.C04)
                {
                    string c02 = Program.Session[Settings.NokiaC02FirmaKodu].ToString();
                    string c14 = Program.Session[Settings.NokiaC14FirmaKodu].ToString();

                    sb.AppendFormat(" WHERE     (sth_evraktip = 4) AND (sth_tarih >= ''{0}'' and sth_tarih <= ''{3}'') AND (sth_cari_kodu <> ''{1}'' and sth_cari_kodu <> ''{2}'' )'", bastarih.ToFullSqlString(), c02, c14, bittarih.ToFullSqlString());
                }
                else if (dbsystem == Db.C02)
                {
                    string c02 = Program.Session[Settings.NokiaC02AktarilmayacakCari].ToString();
                    sb.AppendFormat(" WHERE     (sth_evraktip = 4) AND (sth_tarih >= ''{0}'' and sth_tarih <= ''{2}'') AND (sth_cari_kodu <> ''{1}'')'", bastarih.ToFullSqlString(), c02, bittarih.ToFullSqlString());
                }
                else if (dbsystem == Db.C14)
                {
                    string c14 = Program.Session[Settings.NokiaC14AktarilmayacakCari].ToString();
                    sb.AppendFormat(" WHERE     (sth_evraktip = 4) AND (sth_tarih >= ''{0}'' and sth_tarih <= ''{2}'') AND (sth_cari_kodu <> ''{1}'')'", bastarih.ToFullSqlString(), c14, bittarih.ToFullSqlString());
                }
                else
                {
                    sb.AppendFormat(" WHERE     (sth_evraktip = 4) AND (sth_tarih >= ''{0}'' and sth_tarih <= ''{0}'') '", bastarih.ToFullSqlString(), bittarih.ToFullSqlString());
                }

                q.Add(sb.ToString());
                var sharList = q.ToList(new
                {
                    seri = "",
                    sira = 0,
                    tarih = DateTime.Now,
                    satir = 0,
                    stokkod = "",
                    cari = "",
                    plasiyer = "",
                    miktar = 0d,
                    tutar = 0d,
                    vergiId = 0,
                    vergiTutari = 0d,
                    charId = 0,
                    giridDepo = 0,
                    cikisDepo = 0,
                    isk1 = 0d,
                    isk2 = 0d,
                    isk3 = 0d,
                    sharid = 0
                });

                SqlTransaction trn = _sql.OpenTransaction();
                string evrakSeri = txtSeri.Text;
                int evrakSira;
                int evrakSatir = 0;
                decimal[] vergiler = new decimal[10];
                int CharId = 0;
                double aratoplam = 0;
                double meblag = 0;
                double iskonto1Tutar = 0;
                double iskonto2Tutar = 0;
                double iskonto3Tutar = 0;

                foreach (var evr in charList)
                {
                    var seriList = SerinoBilgileri(evr.id, dbsystem).CastToList(new { seri = "", stokkod = "", alisSeri = "", alisSira = 0, satisSeri = "", satisSira = 0, alisFiyat = 0d, satisFiyat = 0d, alisTarih = DateTime.Now, satisTarih = DateTime.Now, grntBas = DateTime.Now, grntBit = DateTime.Now, alisCari = "", satisCari = "", sharid = 0 });

                    var sonuc = (from s in seriList join t in alinanSeriler on s.seri equals t.serino group s by s.sharid into g select new { g.Key }).ToList();
                    if (sonuc.Count > 0)
                    {
                        foreach (var shr in (from l in sharList.Where(x => x.charId == evr.id) join s in sonuc on l.sharid equals s.Key select l))
                        {
                            aratoplam += shr.tutar;
                            iskonto1Tutar += shr.isk1;
                            iskonto2Tutar += shr.isk2;
                            iskonto3Tutar += shr.isk3;
                            meblag += (shr.tutar + shr.vergiTutari);
                            vergiler[shr.vergiId] += Cevir.Parse<decimal>(shr.vergiTutari);
                        }

                        evrakSira = _mikro.MaxEvrakNo(EvrakTipleri.SatisFaturasi, evrakSeri, trn);

                        CharId = _mikro.CharEkle(EvrakTipleri.SatisFaturasi, trn, txtSeri.Text, evrakSira, evr.tarih, Cevir.Parse<decimal>(meblag), vergiler,
                            evr.satici, CariKodDuzelt(dbsystem, evr.cari), Cevir.Parse<decimal>(aratoplam), evr.belgeno, evr.vade, evr.aciklama, Cevir.Parse<decimal>(iskonto1Tutar), Cevir.Parse<decimal>(iskonto2Tutar), Cevir.Parse<decimal>(iskonto3Tutar), evr.caricins, CariKodDuzelt(dbsystem, evr.chakod), evr.srmkod,0);

                        aratoplam = 0;
                        iskonto1Tutar = 0;
                        iskonto2Tutar = 0;
                        iskonto3Tutar = 0;
                        meblag = 0;
                        for (int i = 0; i < vergiler.Length; i++)
                            vergiler[i] = 0;


                        if (CharId > -1)
                        {
                            evrakSatir = 0;
                            foreach (var shr in (from l in sharList.Where(x => x.charId == evr.id) join s in sonuc on l.sharid equals s.Key select l))
                            {
                                int sharid = _mikro.SharEkle(EvrakTipleri.SatisFaturasi, trn, evrakSeri, evrakSira, evr.tarih, evrakSatir, shr.stokkod,
                                     CariKodDuzelt(dbsystem, shr.cari), shr.plasiyer, Cevir.Parse<decimal>(shr.miktar), Cevir.Parse<decimal>(shr.tutar), shr.vergiId, Cevir.Parse<decimal>(shr.vergiTutari), CharId, KarsiDepono(dbsystem, shr.giridDepo), KarsiDepono(dbsystem, shr.cikisDepo), Cevir.Parse<decimal>(shr.isk1),
                                     Cevir.Parse<decimal>(shr.isk2), Cevir.Parse<decimal>(shr.isk3), evr.srmkod, 0);

                                foreach (var item in seriList.Where(x => x.sharid == shr.sharid))
                                {
                                    _mikro.SerinoHareketEkle(item.seri, item.stokkod, sharid, item.grntBas, item.grntBit, item.alisTarih, item.satisTarih,
                                        evrakSeri, evrakSira, item.satisSeri, item.satisSira, Cevir.Parse<decimal>(item.alisFiyat), Cevir.Parse<decimal>(item.satisFiyat), item.alisCari, CariKodDuzelt(dbsystem, item.satisCari), trn);
                                }

                                evrakSatir++;
                            }
                            CheckedAktarildi(dbsystem, evr.id, CharId);
                        }
                    }

                    progressBarControl1.Position += 1;
                    progressBarControl1.Refresh();

                }

                try
                {
                    trn.Commit();
                    MessageBox.Show("Tamamlandı !");
                }
                catch (Exception ex)
                {
                    Logging.GetLog.ErrorLog(ex);
                    trn.Rollback();
                }
            }
        }

        private void CariTransfer(Db dbsystem, DateTime tarih)
        {
            using (Query q = new Query(dbsystem))
            {
                q.Add("SELECT     cari_kod, cari_unvan1, cari_unvan2, cari_EMail, cari_muh_kod, cari_vdaire_adi, cari_vdaire_no FROM         CARI_HESAPLAR WHERE     (cari_create_date >= @tarih)");
                q.Add("@tarih", SqlDbType.DateTime, tarih);
                var list = q.ToList(new { carikod = "", cariunvan1 = "", cariunvan2 = "", cariemail = "", carimuhkod = "", vergidaire = "", carivergino = "" });
                if (list.Count > 0)
                {
                    Mikro mikro = new Mikro(Db.Nokia);
                    DbSqlServer _sql = new DbSqlServer(Db.Nokia);
                    SqlTransaction trn = _sql.OpenTransaction();

                    progressBarControl1.Properties.Minimum = 0;
                    progressBarControl1.Position = 0;
                    progressBarControl1.Properties.Maximum = list.Count;

                    foreach (var item in list)
                    {
                        mikro.AddtoTeminci(CariKodDuzelt(dbsystem, item.carikod), item.cariunvan1, item.cariunvan2, item.cariemail, item.carimuhkod, item.vergidaire, item.carivergino, trn);

                        progressBarControl1.Position += 1;
                        progressBarControl1.Refresh();
                    }

                    try
                    {
                        trn.Commit();
                    }
                    catch (Exception ex)
                    {
                        Logging.GetLog.ErrorLog(ex);
                        if (trn != null)
                        {
                            trn.Rollback();
                        }
                    }
                }
            }
        }

        private void simpleButton1_Click(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(txtSeri.Text) && radioGroup1.SelectedIndex > 0)
            {
                MessageBox.Show("Lütfen Evrak Serisi Giriniz !");
                return;
            }

            switch (radioGroup1.SelectedIndex)
            {
                case 0://carileri aktar
                    CariTransfer(Db.C02, dteBaslangicTarih.DateTime);
                    CariTransfer(Db.C04, dteBaslangicTarih.DateTime);
                    CariTransfer(Db.C14, dteBaslangicTarih.DateTime);
                    MessageBox.Show("Aktarıldı !");
                    break;
                case 1://alış faturaları
                    AlisFaturaAktar();
                    break;
                case 2://c04 den satışları aktar
                    SatisFaturaAktar(Db.C04);
                    break;
                case 3://c02 den satışları aktar
                    SatisFaturaAktar(Db.C02);
                    break;
                case 4://c14 den satışları aktar
                    SatisFaturaAktar(Db.C14);
                    break;
            }
        }


    }
}
